<
World-Wide Web> (
CGI) A
standard for running external
programs from a
World-Wide Web HTTP server.
CGI
specifies how to pass
arguments to the program as part of
the HTTP request. It also defines a set of {environment
variables} that are made available to the program. The
program generates output, typically
HTML, which the web
server processes and passes back to the
browser.
Alternatively, the program can request
URL redirection.
CGI
allows the returned output to depend in any arbitrary way on
the request.
The
CGI program can, for example, access information in a
database and format the results as HTML. The program can
access any data that a normal application program can, however
the facilities available to
CGI programs are usually limited
for security reasons.
Although
CGI programs can be compiled programs, they are more
often written in a (semi)
interpreted language such as
Perl, or as
Unix shell scripts, hence the common name
"
CGI script".
Here is a trivial
CGI script written in Perl. (It requires
the "
CGI" module available from
CPAN).
#!/usr/bin/perl
use
CGI qw(:standard);
print header, start_html,
h1("
CGI Test"),
"Your IP address is: ", remote_host(),
end_html;
When run it produces an
HTTP header and then a simple HTML
page containing the
IP address or
hostname of the machine
that generated the initial request. If run from a command
prompt it outputs:
Content-Type: text/html; charset=ISO-8859-1
<
!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml"
lang="en-US" xml:lang="en-US">
<
head>
<
title>Untitled Document<
/title>
<
meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1" />
<
/head>
<
body>
<
h1>
CGI Test<
/h1>Your IP address is: localhost
<
/body>
<
/html>
The
CGI program might be saved as the file "test.pl" in the
appropriate directory on a web server,
e.g. "/home/httpd/test".
Accessing the appropriate
URL, e.g.
http://acme.com/test/test.pl, would cause the program to
run and a custom page produced and returned.
Early web servers required all
CGI programs to be installed in
one directory called
cgi-bin but it is better to keep them
with the HTML files to which they relate unless they are truly
global to the site. Similarly, it is neither necessary nor
desirable for all
CGI programs to have the extension ".
cgi".
Each
CGI request is handled by a new process. If the process
fails to terminate for some reason, or if requests are
received faster than the server can respond to them, the
server may become swamped with processes. In order to improve
performance,
Netscape devised
NSAPI and
Microsoft
developed the
ISAPI standard which allow
CGI-like tasks to
run as part of the main server process, thus avoiding the
overhead of creating a new process to handle each
CGI
invocation. Other solutions include
mod_perl and
FastCGI.
Latest version:
CGI/1.1.
cgi">http://hoohoo.ncsa.uiuc.edu/cgi.
(2007-05-22)